using System.Collections;

namespace MirrorMirror.Tests
{
    public class TestClass
    {
        private string classField;
        private IEnumerable interfaceField;
        private int? nullableField;
        private object objectField;
        private ChainClass chain;
        public ChainClass Chain
        {
            get { return chain; }
            set { chain = value; }
        }

        private int valueField;

        public string ClassProperty
        {
            get { return classField; }
            set { classField = value; }
        }

        public int ValueProperty
        {
            get { return valueField; }
            set { valueField = value; }
        }

        public int? NullableProperty
        {
            get { return nullableField; }
            set { nullableField = value; }
        }

        public object ObjectProperty
        {
            get { return objectField; }
            set { objectField = value; }
        }

        public IEnumerable InterfaceProperty
        {
            get { return interfaceField; }
            set { interfaceField = value; }
        }

        public void VoidNullableMethod(int? p)
        {
            VoidMethodCallResult = p.HasValue ? p.ToString() : "null";
        }

        public void VoidObjectMethod(object p)
        {
            VoidMethodCallResult = p != null ? p.ToString() : "null";
        }

        public void VoidMethod(int p)
        {
            VoidMethodCallResult = p.ToString();
        }
        public void VoidMethod(int a, string b)
        {
            VoidMethodCallResult = a + b;
        }
        public void VoidMethod(int a, string b, int c)
        {
            VoidMethodCallResult = a + b + c;
        }
        public void VoidMethod(int a, string b, int c, string d)
        {
            VoidMethodCallResult = a + b + c + d;
        }
        public void VoidMethod(int a, string b, int c, string d,int e)
        {
            VoidMethodCallResult = a + b + c + d + e;
        }
        public void VoidMethod(int a, string b, int c, string d, int e,string f)
        {
            VoidMethodCallResult = a + b + c + d + e+f;
        }
        public void VoidMethod(int a, string b, int c, string d, int e, string f,int g)
        {
            VoidMethodCallResult = a + b + c + d + e + f+g;
        }
        public void VoidMethod(int a, string b, int c, string d, int e, string f, int g, string h)
        {
            VoidMethodCallResult = a + b + c + d + e + f + g + h;
        }
        public void VoidMethod(int a, string b, int c, string d, int e, string f, int g, string h, int i)
        {
            VoidMethodCallResult = a + b + c + d + e + f + g + h+i;
        }

        public int GetMethod()
        {
            return 4;
        }

        public string GetMethod(int p)
        {
            return p.ToString();
        }
        public string GetMethod(int a, string b)
        {
            return a + b;
        }
        public string GetMethod(int a, string b, int c)
        {
            return a + b + c;
        }
        public string GetMethod(int a, string b, int c, string d)
        {
            return a + b + c + d;
        }
        public string GetMethod(int a, string b, int c, string d, int e)
        {
            return a + b + c + d + e;
        }
        public string GetMethod(int a, string b, int c, string d, int e, string f)
        {
            return a + b + c + d + e + f;
        }
        public string GetMethod(int a, string b, int c, string d, int e, string f, int g)
        {
            return a + b + c + d + e + f + g;
        }
        public string GetMethod(int a, string b, int c, string d, int e, string f, int g, string h)
        {
            return a + b + c + d + e + f + g + h;
        }
        public string GetMethod(int a, string b, int c, string d, int e, string f, int g, string h, int i)
        {
            return a + b + c + d + e + f + g + h + i;
        }
        public void VoidMethod()
        {
            VoidMethodCalled = true;
        }

        public bool VoidMethodCalled { get; private set; }

        public string VoidMethodCallResult { get; private set; }
    }
}